// 登录页面设计

// 移除VSCode报警
// ignore_for_file: non_constant_identifier_names, prefer_const_constructors_in_immutables, use_build_context_synchronously, camel_case_types
// ignore_for_file: sized_box_for_whitespace

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:project_award_statistics/pages/mobile_material_design/home_page/home_page.dart';
import 'package:project_award_statistics/utils/mobile_material_design/dialogs/login/dialog_login_err_empty.dart';
import 'package:project_award_statistics/utils/mobile_material_design/dialogs/login/dialog_login_err_wrong_passwd.dart';
import 'package:project_award_statistics/utils/load_user_info_from_db/load_user_info.dart';
import 'package:project_award_statistics/utils/load_user_info_from_db/user_model.dart';
import 'package:project_award_statistics/utils/mobile_material_design/my_button.dart';

class LoginPage_Mobile extends StatelessWidget {
  LoginPage_Mobile ({super.key});
  @override
  Widget build(BuildContext context) {

    // 初始化用于输入用户名的文本控制对象
    final controller_user = TextEditingController();

    // 初始化用于输入密码的文本控制对象
    final controller_password = TextEditingController();

    // 用于检查用户名与对应密码输入是否正确
    Future <bool> is_allow_login (String stu_name,String password) async  
      {
        List <user_info_model> cur_user_info=await DBProvider_UserInfo().get_user_list();
        int i=0;
        int input_user_point=0; // input_user_point用于下方循环找到
        bool user_is_exist=false;  // user_is_exist用于下方是否在用户数据表中找到对应用户
        for (i=0;i<cur_user_info.length;i++)
          {
            if (controller_user.text==cur_user_info[i].stu_name)
              {
                input_user_point=i;   // 更新下标
                user_is_exist=true;   // 更新开关,表明找到了用户
                break;
              }
          }
        if (user_is_exist)
          {
            if (controller_password.text==cur_user_info[input_user_point].password)
              {
                return true;   // 用户密码正确就允许登录
              }
          }
        return false;   // 否则禁止登录
      } 

    // 该函数用于按下"登录"按钮时执行并检查登录
    void do_login (BuildContext context) async
      {
        if (controller_user.text.isEmpty || controller_password.text.isEmpty)   // 如果检测到用户未按照规范格式填写姓名与登录密码   
          {    // 那就返回报错对话框
            showDialog(  // 显示报错对话框
              context: context, 
              builder: (context){
                return DialogLoginErr_Empty();
              }
            );
          }
        else if (!await is_allow_login(controller_user.text,controller_password.text))  // 如果用户将用户名密码乱输
          { // 那就返回报错对话框
            showDialog(  // 显示报错对话框
              context: context, 
              builder: (context){
                return DialogLoginErr_WrongPasswd(stu_name: controller_user.text,);    // 传入用户输入的对应姓名
              }
            );
          }
        else   // 进行正常登录
          {
            Navigator.push(
              context,
              MaterialPageRoute(
                builder: (context) => HomePage_Mobile(stu_name:controller_user.text,),
                settings: RouteSettings(
                  arguments: controller_user.text,
                ), // 给主页传入用户名
              ),
            );
          }
      }

    return Scaffold(
      resizeToAvoidBottomInset: false,    // 防止安卓设备输入时导致程序显示面积被压缩
      // 初始化登录页面
      appBar: // 设置应用顶栏样式
        AppBar(
        backgroundColor: Colors.transparent,
        elevation: 0,
        foregroundColor: Theme.of(context).colorScheme.inversePrimary,
        automaticallyImplyLeading: false,  // 禁止左上角出现返回按钮
        title: Center(
          child: Text(
            "电子设计工作室奖状查询软件",
            style: TextStyle(
              fontSize: 18,
            ),
          ), // 设置标题栏文字
        ),
        actions: [
          // 设置右侧退出按钮
          IconButton(
            onPressed: () async {     // 设置按下退出应用功能
              await SystemChannels.platform.invokeMethod('SystemNavigator.pop');
            }, 
            icon: const Icon(Icons.exit_to_app), // 设置退出图标
          ),
        ],
      ),
      backgroundColor: Theme.of(context).colorScheme.surface, // 设置背景颜色
      body: Center(
        // 设置元素都居中布局
        child: Padding(
          padding: const EdgeInsets.only(left:18.0,right:18.0,top:24.0),    // 设置程序总控件边距
          child: Column(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            // 在中心总布局前提下再加入行式布局
            children: [
              Center(   // 设置中心总布局
                child: Row(
                  mainAxisAlignment: MainAxisAlignment.center,   // 设置列式布局中间对齐
                  children: [
                    Image.asset(     // 显示校徽
                      "lib/images/northwest_minzu_university_icon.png",
                      width: 100,
                      height: 100,
                    ),
                    const SizedBox(width: 30,),
                    Column(    // 用于布局"西北民族大学奖状查询软件"控件
                      children: [
                        Text(
                          "西北民族大学",
                          style:  // 设计字体样式
                          TextStyle(
                            color: Colors.black,
                            fontSize: 30,
                            fontWeight: FontWeight.bold,
                          ),
                        ),
                        const SizedBox(height: 20,),
                        Text(
                          "电子设计工作室",
                          style: // 设计字体样式
                          TextStyle(
                            color: Colors.black,
                            fontSize: 20,
                          ),
                        ),
                      ],
                    ),
                  ],
                ),
              ),
      

              // 先设置输入学号与密码的输入框
              Column(
                children: [
                  TextField(
                    controller: controller_user, // 让输入内容在controller_user中读到
                    decoration: InputDecoration(
                      border: OutlineInputBorder(),
                      hintText: "请在这里输入您的姓名~",
                    ),
                  ),
                  const SizedBox(height: 50,),
                  TextField(
                    controller:controller_password, // 让输入内容在controller_password中读到
                    obscureText: true, // 设置为true以隐藏输入的文本
                    decoration: InputDecoration(
                      border: OutlineInputBorder(),
                      hintText: "请在这里输入您的密码~",
                    ),
                  ),
                  const SizedBox(height: 120,),  // 设置底部控件适应主列式布局的SpaceBetween特性
                ],
              ),
              

              //SizedBox(height: 180,),  // 设置控件间间隔

              // 在下一行设置按钮
              Column(  // 增加行式布局是为了给按钮控件后面加上sizedBox设置与底部的距离,更加美观
                children: [
                  Padding(
                    padding: const EdgeInsets.only(left: 10.0,right: 10.0),
                    child: Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      children: [
                        Container(  // 设置登录按钮
                          width: 140,
                          height: 50,
                          child: MyButton(
                            // 这里设置登录后直接跳转主页
                            text: "登录",
                            onPressed:
                              () => do_login(context),
                          ),
                        ),
                        Container(
                          width: 140,
                          height: 50,
                          child:
                            MyButton(
                              text: "注册", 
                              onPressed: (){
                                Navigator.pushNamed(context,'/register_page');
                              },
                            ),
                        ),
                      ],
                    ),
                  ),
                  const SizedBox(height: 50,),
                ],
              ),
            ],
          ),
        ),
      ),
    );
  }
}
